// 类型15： 定义接口
// 批注，不能直接限制属性的个数，属性的名称，属性的值类型
// 接口就是来完成这些操作，提前声明未来创建的这个对象应该长什么样子
// 接口就是定义对象的"形状"
{

interface GirlFriend {
    name: string,
    age: number,
    hobby: string[],
    // 可选的
    isFlag?: boolean,
    // 声明只读属性
    readonly nickName: string,

    // 声明方法 - 必须要带返回值 没有返回值一定要写 void
    sayHi: (arg1: boolean) => string,
    // 直接定义，没有返回值
    eat(): void,
    demo?(): string
}

const obj: GirlFriend = {
    name: '迪丽热巴',
    age: 20,
    hobby: ['唱','跳', 'rap', '篮球'],
    // isFlag: false
    nickName: '胖迪',
    sayHi(flag) {
        console.log(this.name);
        return flag ? '成功' : '失败'
    },
    eat() {
        console.log('还有几分钟');
    },
    demo() {
        return 'hello world.'
    }
}

// 不允许修改只读属性
// obj.nickName = '热热';
console.log(obj);
console.log(obj.sayHi(true));
obj.eat();
console.log(obj.demo());


}